# 利用中点算法绘制一个半径为100，圆心为(10,20)的圆，要求坐标原点为画布中心。

import numpy as np
import matplotlib.pyplot as plt

def MPCycle(r):
    """
    绘制以0，0为圆心的圆
    """
    points = []
    e = 1 - r
    x, y = 0, r
    while x<=y:
        points.append((x, y))
        # 对称性，把其他8个子象限的点也找到
        points.append((y, x))
        points.append((-x, y))
        points.append((-y, x))
        points.append((x, -y))
        points.append((y, -x))
        points.append((-x, -y))
        points.append((-y, -x))

        if e<0:
            e += 2*x+3
        else:
            e += 2*(x-y)+5
            y -= 1

        x += 1

    return points


# 绘制线段
r = 100
points = MPCycle(r)

# 所有点平移(10,20)
xs = []
ys = []
for (x, y) in points:
    xs.append(x+10)
    ys.append(y+20)

# 设置画布大小
plt.figure(figsize=(6, 6))
# 开启网格线
plt.grid(True)
# 显示图像
plt.scatter(xs, ys, s=1, c='r')
plt.xlim(-200, 200)
plt.ylim(-200, 200)
plt.show()
